package leetcode_41_60;

public class generateMatrix_59 {
    /**
     * 给一个正整数 n ，生成一个包含 1 到 n2 所有元素
     * 且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
     * @param n
     * @return
     */
    public int[][] generateMatrix(int n) {
        /*
        思路是维护上下左右边界，根据边界填充完一行或一列就进行更新上下边界
         0ms 100%
         */
        int[][] res=new int[n][n];
        boolean order=true; //此时是否是正向
        int num=1;
        int rowUp=0,rowDown=n-1;      //上下边界
        int colLeft=0,colRight=n-1;        //左右边界
        while(rowUp<=rowDown && colLeft <= colRight){
            if (order) {
                for (int i = colLeft; i <= colRight; i++) { //从左往右
                    res[rowUp][i]=num++;
                }
                rowUp+=1;      //更新上边界
                for (int j = rowUp; j <= rowDown; j++) { //从上往下
                    res[j][colRight]=num++;
                }
                colRight-=1;   //更新右边界
                order=false;  //下次循环是逆序
            }else {
                for (int i = colRight; i >= colLeft; i--){   //从右往左
                    res[rowDown][i]=num++;
                }
                rowDown-=1; //更新下边界
                for (int j = rowDown; j >= rowUp; j--) { //从下往上
                    res[j][colLeft]=num++;
                }
                colLeft+=1;    //更新左边界
                order=true;  //下次循环是正序
            }
        }
        return res;
    }
}
